TypeScriptμ νμ μμ€ν μ΄ μ ν리μΌμ΄μ μ λ΄κ²°ν¨μ±μ μ΄λ»κ² ν₯μμν€κ³ , λ κ°λ ₯νκ³ μ λ’°ν μ μλ μμ€ν μΌλ‘ μ΄λλμ§ νꡬν©λλ€. μ€μ©μ μΈ κΈ°μ κ³Ό κΈλ‘λ² λͺ¨λ² μ¬λ‘λ₯Ό λ°°μ°μΈμ.
TypeScript λ΄κ²°ν¨μ±: νμ μμ μ±μΌλ‘ μ λ’°ν μ μλ μμ€ν  ꡬμΆ
μννΈμ¨μ΄ κ°λ°μ μΈκ³μμ μ λ’°ν μ μκ³ νλ ₯μ μΈ μμ€ν μ ꡬμΆνλ κ²μ κ°μ₯ μ€μν©λλ€. λ΄κ²°ν¨μ±(fault tolerance)μ κ²°ν¨μ΄ μλ μν©μμλ μμ€ν μ΄ μ¬λ°λ₯΄κ² κ³μ μλνλ λ₯λ ₯μΌλ‘, ν΅μ¬μ μΈ μ€κ³ κ³ λ € μ¬νμ λλ€. TypeScriptλ κ°λ ₯ν νμ μμ€ν μ ν΅ν΄ λ΄κ²°ν¨μ±μ κ°ννκ³ λμ± κ²¬κ³ ν μ ν리μΌμ΄μ μ ꡬμΆνλ κ°λ ₯ν λꡬλ₯Ό μ 곡ν©λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμ TypeScriptκ° μ΄λ₯Ό λ¬μ±νλ λ° μ΄λ»κ² νμ©λ μ μλμ§ νμνλ©°, λ€μν κ°λ° νκ²½μ μ μ© κ°λ₯ν μ€μ©μ μΈ κΈ°μ κ³Ό κΈλ‘λ² λͺ¨λ² μ¬λ‘λ₯Ό μ μν©λλ€.
λ΄κ²°ν¨μ±κ³Ό κ·Έ μ€μμ± μ΄ν΄
λ΄κ²°ν¨μ±μ νλμ¨μ΄ λλ μννΈμ¨μ΄ μ€λ₯μλ λΆκ΅¬νκ³ κΈ°λ₯μ μ μ§νλ μμ€ν μ λ₯λ ₯μ λλ€. λ΄κ²°ν¨μ± μμ€ν μ μ€λ₯λ₯Ό μ°μνκ² μ²λ¦¬νμ¬ μ€λ₯κ° μ°μμ μΌλ‘ λ°μνμ¬ κ΄λ²μν μμ€ν  μ€λ¨μ μ΄λνλ κ²μ λ°©μ§νλλ‘ μ€κ³λμμ΅λλ€. μ΄λ μ€μν λ°μ΄ν°λ₯Ό μ²λ¦¬νκ±°λ μ€μκ° μμ μ μννκ±°λ μ  μΈκ³μ μΌλ‘ λ§μ μ¬μ©μ κΈ°λ°μ μλΉμ€λ₯Ό μ 곡νλ μ ν리μΌμ΄μ μμ νΉν μ€μν©λλ€. λ΄κ²°ν¨μ±μ μ΄μ μ λ€μκ³Ό κ°μ΄ λ€μν©λλ€.
- μ λ’°μ± μ¦κ°: μμ€ν μ μΆ©λ λ° μμμΉ λͺ»ν λμμ λ μ·¨μ½ν©λλ€.
 - κ°μ©μ± ν₯μ: μΌλΆ κ΅¬μ± μμκ° μ€ν¨νλλΌλ μμ€ν μ κ³μ μλν©λλ€.
 - λ€μ΄νμ κ°μ: λ λΉ λ₯Έ 볡ꡬ μκ°μ μλΉμ€ μ€λ¨μ μ΅μνν©λλ€.
 - ν₯μλ μ¬μ©μ κ²½ν: μ¬μ©μλ λμ± μμ μ μ΄κ³ μΌκ΄λ μλΉμ€λ₯Ό κ²½νν©λλ€.
 - λΉμ© μ κ°: μλ κ°μ λ° λ³΅κ΅¬ λ Έλ ₯μ νμμ±μ΄ μ€μ΄λλλ€.
 
μμ€ν μ΄ λ€μν λ€νΈμν¬ μ‘°κ±΄, μμ΄ν νλμ¨μ΄ κ΅¬μ± λ° μ μ¬μ μΈ μ§μ μ€λ¨μ μ²λ¦¬ν΄μΌ νλ κΈλ‘λ² νκ²½μμλ λ΄κ²°ν¨μ±μ΄ ν¨μ¬ λ μ€μν΄μ§λλ€. λ΄κ²°ν¨μ±μ μΌλμ λκ³ κ΅¬μΆλ μ ν리μΌμ΄μ μ μ  μΈκ³μ λΆμ°λ νκ²½μ κ³Όμ λ₯Ό λ μ μ²λ¦¬ν μ μμ΅λλ€.
TypeScriptκ° λ΄κ²°ν¨μ±μ ν₯μμν€λ λ°©λ²
TypeScriptμ μ μ  νμ μμ€ν μ λ΄κ²°ν¨μ± μμ€ν μ ꡬμΆνλ λ° λͺ κ°μ§ μ£Όμ μ΄μ μ μ 곡ν©λλ€.
1. μ‘°κΈ° μ€λ₯ κ°μ§
TypeScriptλ λ°νμ ν¨μ¬ μ΄μ μ κ°λ° λ¨κ³(μ»΄νμΌ νμ)μμ νμ κ΄λ ¨ μ€λ₯λ₯Ό ν¬μ°©ν©λλ€. μ΄λ¬ν μ‘°κΈ° κ°μ§λ λ§μ μΌλ°μ μΈ μ€λ₯κ° νλ‘λμ μ λλ¬νλ κ²μ λ°©μ§ν©λλ€. μλ₯Ό λ€μ΄, λ¬Έμμ΄μ μ«μ λ³μμ ν λΉνλ €κ³ μλνλ©΄ μ»΄νμΌλ¬μ μν΄ νλκ·Έκ° μ§μ λ©λλ€. μ΄λ¬ν μ¬μ  μλ°©μ  μ κ·Ό λ°©μμ μμ€ν  μλμ λ°©ν΄ν μ μλ λ°νμ μμΈμ μνμ ν¬κ² μ€μ λλ€. λ€μ κ°λ¨ν μλ₯Ό κ³ λ €νμμμ€.
            // TypeScript example: Type checking
let age: number = \"thirty\"; // Compile-time error: Type 'string' is not assignable to type 'number'
            
          
        μ΄λ¬ν μ‘°κΈ° μ€λ₯ κ°μ§λ κ°λ°μκ° μ¬μ©μμκ² μν₯μ λ―ΈμΉκΈ° μ μ λ¬Έμ λ₯Ό μλ³νκ³ ν΄κ²°νλ λ° λμμ΄ λ©λλ€. μ΄λ μ  μΈκ³μ μΌλ‘ μ μ© κ°λ₯νλ©°, μ  μΈκ³ κ°λ°μλ€μ΄ μ΄λ₯Ό νμ©νμ¬ κ²¬κ³ ν μμ€ν μ λ§λ€ μ μμ΅λλ€.
2. νμ μμ μ± λ° λ°μ΄ν° 무결μ±
TypeScriptλ λ°μ΄ν°κ° 미리 μ μλ νμ μ λ°λ₯΄λλ‘ λ³΄μ₯ν©λλ€. μ΄λ¬ν νμ μμ μ±μ μμμΉ λͺ»ν λ°μ΄ν° λ³ν λ° λΆμΌμΉλ₯Ό λ°©μ§ν©λλ€. μΈν°νμ΄μ€μ νμ μ μ¬μ©νμ¬ κ°λ°μλ λ°μ΄ν°μ μμ ꡬ쑰λ₯Ό μ μνμ¬ ν¨μμ κ΅¬μ± μμκ° λ°μ΄ν°λ₯Ό μ¬λ°λ₯΄κ² μμ νκ³ μ²λ¦¬νλλ‘ λ³΄μ₯ν μ μμ΅λλ€. μ΄λ μμ€ν  μ₯μ λ₯Ό μ λ°ν μ μλ μμλ λ°μ΄ν°λ‘λΆν° 보νΈν©λλ€. μλ₯Ό λ€μ΄:
            // TypeScript example: Type-safe data structures
interface User {
  id: number;
  name: string;
  email: string;
}
function displayUser(user: User): void {
  console.log(`User ID: ${user.id}, Name: ${user.name}, Email: ${user.email}`);
}
const newUser: User = {
  id: 123,
  name: 'Alice',
  email: 'alice@example.com',
};
displayUser(newUser);
            
          
        μ΄ μμ μμ `displayUser` ν¨μλ `User` μΈν°νμ΄μ€λ₯Ό μ€μνλ κ°μ²΄λ§ νμ©ν©λλ€. μ΄ κ΅¬μ‘°μ μΌμΉνμ§ μλ κ°μ²΄λ₯Ό μ λ¬νλ €λ μλλ μ»΄νμΌ νμ μ€λ₯λ₯Ό λ°μμμΌ μμμΉ λͺ»ν λμμ λ°©μ§νκ³ μ ν리μΌμ΄μ  λ΄μμ μ²λ¦¬λλ λ°μ΄ν°μ 무결μ±μ 보μ₯ν©λλ€.
3. μ½λ μ μ§ λ³΄μμ± λ° λ¦¬ν©ν λ§
TypeScriptμ κ°λ ₯ν νμ΄νμ μ½λλ₯Ό μ΄ν΄νκ³ μ μ§ λ³΄μνλ©° 리ν©ν λ§νκΈ° μ½κ² λ§λλλ€. λ³κ²½ μ¬νμ΄ λ°μνλ©΄ μ»΄νμΌλ¬λ μ½λλ² μ΄μ€μ λ€λ₯Έ λΆλΆμ λν μ μ¬μ  μν₯μ μ μνκ² μλ³νμ¬ λ¦¬ν©ν λ§ μ€ μ€λ₯κ° λ°μν μνμ μ€μ λλ€. μ΄λ₯Ό ν΅ν΄ μκ°μ΄ μ§λ¨μ λ°λΌ μ ν리μΌμ΄μ μ λ μ½κ² μμ νκ³ κ°μ ν μ μμ΄ μλνμ§ μμ λΆμμ©μΌλ‘ μΈν μ€λ₯ λ°μ κ°λ₯μ±μ μ€μ λλ€. μ΄λ νλ‘μ νΈμ κΈλ‘λ² μμΉλ κ·λͺ¨μ κ΄κ³μμ΄ μ΄μ μ λλ€.
4. ν₯μλ μ€λ₯ μ²λ¦¬ κΈ°μ
TypeScriptλ νΉμ  νμ κ³Ό κΈ°μ μ μ¬μ©νμ¬ λμ± κ°λ ₯ν μ€λ₯ μ²λ¦¬λ₯Ό μ©μ΄νκ² ν©λλ€. μ΄λ¬ν κΈ°μ μ ν΅ν΄ κ°λ°μλ μ μ¬μ μΈ μ€λ₯λ₯Ό λ³΄λ€ ν¨κ³Όμ μΌλ‘ μμΈ‘νκ³ κ΄λ¦¬ν μ μμ΅λλ€.
a. `try...catch` λΈλ‘ μ¬μ©
JavaScriptμ νμ€ `try...catch` λΈλ‘μ TypeScriptμμ μμΈλ₯Ό μ²λ¦¬νλ λ° ν¨κ³Όμ μΌλ‘ μ¬μ©λ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ νΉμ  μ½λ μΉμ  μ€ν μ€μ λ°μν μ μλ μ€λ₯λ₯Ό μ°μνκ² μ²λ¦¬ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μΈλΆ APIμ μνΈ μμ©ν λ μ ν리μΌμ΄μ μ λ€νΈμν¬ κ΄λ ¨ μ€λ₯, μλΉμ€ μ¬μ© λΆκ°λ₯ λλ μλͺ»λ λ°μ΄ν° νμμ μ²λ¦¬ν μ€λΉκ° λμ΄ μμ΄μΌ ν©λλ€. `try...catch` λΈλ‘μ μ¬μ©νλ©΄ μ ν리μΌμ΄μ μ΄ λ―Έλ¦¬ μ μλ λ°©μμΌλ‘ μλ΅ν μ μμ΅λλ€(μ: μ¬μ©μμκ² μ€λ₯ λ©μμ§ νμ, μμ² μ¬μλ, μ€λ₯ λ‘κΉ λ±).
            // TypeScript example: try...catch blocks
async function fetchData(url: string): Promise {
  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return await response.json();
  } catch (error: any) {
    console.error(\"Error fetching data:\", error);
    // Implement error handling logic, like displaying an error message
    return null; // Or throw a custom error
  }
}
 
            
          
        μ΄ μμ μμ `fetchData` ν¨μλ `try...catch` λΈλ‘μ μ¬μ©νμ¬ API νΈμΆ μ€ λ°μν μ μλ μ μ¬μ  μ€λ₯λ₯Ό μ²λ¦¬ν©λλ€. API νΈμΆμ΄ μ€ν¨νκ±°λ μ€λ₯κ° λ°μνλ©΄ `catch` λΈλ‘ λ΄μ μ½λκ° μ€νλμ΄ μ ν리μΌμ΄μ μ΄ μ μ νκ² μλ΅ν μ μλλ‘ ν©λλ€.
b. μ¬μ©μ μ μ μ€λ₯ ν΄λμ€
μ¬μ©μ μ μ μ€λ₯ ν΄λμ€λ νΉμ  μ νμ μ€λ₯λ₯Ό λνλ΄λλ‘ μ μλμ΄ λ λ§μ 컨ν μ€νΈλ₯Ό μ 곡νκ³ λμμ΄ μ§μ λ μ€λ₯ μ²λ¦¬λ₯Ό μ©μ΄νκ² ν©λλ€. λ΄μ₯ `Error` ν΄λμ€λ₯Ό νμ₯ν¨μΌλ‘μ¨ κ°λ°μλ μ ν리μΌμ΄μ μ νΉμ  μꡬ μ¬νμ λ§μΆ° μ¬μ©μ μ μ μ€λ₯ νμ μ λ§λ€ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ€λ₯μ μμΈμ μλ³νκ³ νΉμ  μ€λ₯ μ²λ¦¬ μ λ΅μ ꡬννλ κ²μ΄ λ μ¬μμ§λλ€. μ ν리μΌμ΄μ μ΄ λ°μ΄ν°λ² μ΄μ€μ μνΈ μμ©νλ μλ리μ€λ₯Ό κ³ λ €ν΄ λ³΄μμμ€. `DatabaseConnectionError`λΌλ μ¬μ©μ μ μ μ€λ₯ ν΄λμ€λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€ μ°κ²°κ³Ό κ΄λ ¨λ λ¬Έμ λ₯Ό νΉν μ²λ¦¬ν μ μμ΅λλ€.
            // TypeScript example: Custom error classes
class DatabaseConnectionError extends Error {
  constructor(message: string) {
    super(message);
    this.name = 'DatabaseConnectionError';
    Object.setPrototypeOf(this, DatabaseConnectionError.prototype);
  }
}
async function connectToDatabase(): Promise {
  try {
    // Attempt to connect to the database
    // ... Database connection code ...
  } catch (error: any) {
    throw new DatabaseConnectionError('Failed to connect to the database: ' + error.message);
  }
}
 
            
          
        `DatabaseConnectionError`μ κ°μ μ¬μ©μ μ μ μ€λ₯ ν΄λμ€λ μ€λ₯ κ°μ§ λ° μ²λ¦¬μ μΈλΆμ±μ ν₯μμν΅λλ€.
c. `Result` νμ (μ νμ  νμ ) μ¬μ©
`Result` νμ (λλ `ts-results`μ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ μ’ μ’ ννλλ μ νμ  νμ )κ³Ό κ°μ ν¨μν νλ‘κ·Έλλ° κΈ°μ μ TypeScriptμμ μ±κ³΅ λ° μ€ν¨ μλ리μ€λ₯Ό λͺ μμ μΌλ‘ μ²λ¦¬νμ¬ κ΄λ²μν `try...catch` λΈλ‘μ νμμ±μ μ€μ΄λ λ° μ μ©λ μ μμ΅λλ€. `Result` νμ μ ν¨μκ° μ±κ³΅(κ°μ λ°ν)νκ±°λ μ€ν¨(μ€λ₯λ₯Ό λ°ν)ν μ μμ λ νΉν μ μ©ν©λλ€. μ΄ ν¨ν΄μ κ°λ°μκ° μ±κ³΅ λ° μ€ν¨ μ¬λ‘λ₯Ό λͺ μμ μΌλ‘ μ²λ¦¬νλλ‘ κΆμ₯νμ¬ μ²λ¦¬λμ§ μμ μμΈμ κ°λ₯μ±μ μ€μ λλ€.
            // TypeScript example: Result type for success/failure
import { Result, Ok, Err } from 'ts-results';
function divide(a: number, b: number): Result {
  if (b === 0) {
    return Err('Division by zero is not allowed.');
  }
  return Ok(a / b);
}
const result = divide(10, 0);
if (result.ok) {
  console.log('Result:', result.value);
} else {
  console.error('Error:', result.error);
}
 
            
          
        μ΄ μμ μμ `divide` ν¨μλ λλκΈ° κ²°κ³Όλ₯Ό ν¬ν¨νλ `Ok` κ²°κ³Ό λλ μ€λ₯ λ©μμ§λ₯Ό ν¬ν¨νλ `Err` κ²°κ³Όλ₯Ό λ°νν©λλ€. μ΄ ν¨ν΄μ λ³΄λ€ λͺ μμ μΈ μ€λ₯ κ΄λ¦¬λ₯Ό μ΄μ§ν©λλ€.
5. λ΄κ²°ν¨μ± μ€κ³λ₯Ό μν TypeScript κΈ°λ₯ νμ©
TypeScriptλ λ΄κ²°ν¨μ± μμ€ν  μ€κ³λ₯Ό μ§μνλ λ€μν κΈ°λ₯μ μ 곡ν©λλ€.
a. μΈν°νμ΄μ€ λ° νμ λ³μΉ
μΈν°νμ΄μ€ λ° νμ λ³μΉμ μ½λλ² μ΄μ€ μ 체μμ λ°μ΄ν° ꡬ쑰 μΌκ΄μ±μ κ°μ ν©λλ€. λ°μ΄ν°μ ννλ₯Ό μ§μ νλ μΈν°νμ΄μ€λ₯Ό μ μνλ©΄ ν¨μμ κ΅¬μ± μμκ° μμΈ‘ κ°λ₯νκ³ μ ν¨μ± κ²μ¬λ₯Ό κ±°μΉ λ°μ΄ν°λ‘ μμ ν μ μμ΅λλ€. μ΄λ μμμΉ λͺ»ν λ°μ΄ν° νμμΌλ‘ μΈν λ°νμ μ€λ₯μ μνμ μ΅μνν©λλ€. μ΄λ μΈλΆ API λ° μλΉμ€μ ν΅ν©ν λ μ€μν©λλ€. μ  μΈκ³μ λΆμ°λ νμ μ΄λ₯Ό νμ©νμ¬ μμΉμ κ΄κ³μμ΄ μλΉμ€ κ° ν΅μ μ μν νμ€ λ°μ΄ν° ꡬ쑰λ₯Ό μ μν μ μμ΅λλ€.
            // TypeScript example: Interfaces and type aliases
interface Product {
  id: number;
  name: string;
  price: number;
}
type ProductList = Product[];
function displayProducts(products: ProductList): void {
  products.forEach(product => {
    console.log(`${product.name}: $${product.price}`);
  });
}
            
          
        b. μ λ€λ¦
μ λ€λ¦μ νμ μμ μ±μ μ μ§νλ©΄μ λ€μν νμ μΌλ‘ μμ ν μ μλ μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμλ₯Ό μμ±ν μ μκ² ν©λλ€. μ΄λ νΉν λ°μ΄ν° μ²λ¦¬ λλ λ€μν νμ μ λ°μ΄ν°λ₯Ό λ°ννλ APIμ μνΈ μμ©νλ κ²κ³Ό κ°μ μμ μ λν΄ μ½λμ μ μ°μ±κ³Ό μ μ§ λ³΄μμ±μ ν₯μμν΅λλ€. μ λ€λ¦μ μ μ¬μ μΌλ‘ λλ½λκ±°λ μ€λ₯κ° μλ λ°μ΄ν°λ₯Ό κ΄λ¦¬νκΈ° μν μ λ€λ¦ `Maybe` νμ λλ `Either` νμ κ³Ό κ°μ λ΄κ²°ν¨μ± λ°μ΄ν° ꡬ쑰λ₯Ό λ§λλ λ°λ μ¬μ©λ μ μμ΅λλ€. μ΄λ μ¬λ¬ μ§μμμ λ€μν λ°μ΄ν° νμμ μ²λ¦¬ν΄μΌ ν μ μλ κ΅μ νλ μ ν리μΌμ΄μ μ μ μ©ν©λλ€.
            // TypeScript example: Generics
function identity(arg: T): T {
  return arg;
}
const numberResult = identity(5);
const stringResult = identity('hello');
   
            
          
        c. μ νμ  μμ± λ° Null/Undefined μ²λ¦¬
μ νμ  μμ± λ° null/undefined μ²λ¦¬(`?` λ° `null` λ° `undefined` νμ μ μ¬μ©)λ λ°μ΄ν°κ° λλ½λ μ μλ κ²½μ°λ₯Ό μ²λ¦¬νλ λ° λμμ΄ λ©λλ€. μ΄λ λ°μ΄ν° κ°μ©μ±μ΄ 보μ₯λμ§ μλ μΈλΆ λ°μ΄ν° μμ€μ μμ ν λ νΉν κ΄λ ¨μ΄ μμ΅λλ€. μ μ¬μ μΈ `null` λλ `undefined` κ°μ λͺ μμ μΌλ‘ μ²λ¦¬νλ©΄ λ°νμ μ€λ₯λ₯Ό λ°©μ§ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€μμ μ¬μ©μ λ°μ΄ν°λ₯Ό κ²μνλ μμ€ν μμ μ ν리μΌμ΄μ μ μ¬μ©μκ° μ‘΄μ¬νμ§ μκ±°λ νΉμ  λ°μ΄ν° νλλ₯Ό μ¬μ©ν μ μλ μλ리μ€λ₯Ό μμΈ‘ν΄μΌ ν©λλ€. μ΄λ null ν¬μΈν° μμΈ λ° κ΄λ ¨ λ°νμ μ€λ₯λ₯Ό λ°©μ§νλ λ° λμμ΄ λ©λλ€. μ΄ λ°©λ²μ 보νΈμ μΌλ‘ μ μ΅ν©λλ€.
            // TypeScript example: Optional properties
interface User {
  id: number;
  name: string;
  email?: string; // Optional property
}
function displayUser(user: User): void {
  console.log(`User ID: ${user.id}, Name: ${user.name}`);
  if (user.email) {
    console.log(`Email: ${user.email}`);
  }
}
            
          
        d. λΆλ³μ±
λΆλ³μ±μ μ₯λ €νλ κ²(μ: `readonly` μμ± μ¬μ© λλ λΌμ΄λΈλ¬λ¦¬μ λΆλ³ λ°μ΄ν° ꡬ쑰 μ¬μ©)μ λ―Έλ¬νκ³ λλ²κ·ΈνκΈ° μ΄λ €μ΄ μ€λ₯λ₯Ό μ λ°ν μ μλ μμμΉ λͺ»ν λ°μ΄ν° λ³μ΄μ μνμ μ€μ λλ€. λΆλ³μ±μ μ ν리μΌμ΄μ μ μνλ₯Ό μΆλ‘ νκΈ° μ½κ² λ§λ€κ³ μμμΉ λͺ»ν λμμ μ λ°ν μ μλ μ°λ°μ μΈ μμ μ λ°©μ§ν©λλ€. μ΄λ κΈμ΅ μμ€ν  λλ λ―Όκ°ν μ¬μ©μ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ μμ€ν κ³Ό κ°μ΄ λ°μ΄ν° μΌκ΄μ± λ° λ¬΄κ²°μ±μ΄ κ°μ₯ μ€μν μ ν리μΌμ΄μ μ λ§€μ° μ€μν©λλ€. λΆλ³ ν¨ν΄μ λ€λ₯Έ κ°λ°μκ° κ³΅μ μ½λλ² μ΄μ€λ₯Ό μ¬μ©νλ λ°©μμ λ°λΌ μμΈ‘ν μ μλ λΆμμ©μ μμ±ν κ°λ₯μ±μ΄ μ κΈ° λλ¬Έμ κΈλ‘λ² νμ μ λ μ½κ² λ§λλλ€.
            // TypeScript example: Readonly properties
interface Point {
  readonly x: number;
  readonly y: number;
}
const point: Point = {
  x: 10,
  y: 20,
};
// point.x = 30; // Error: Cannot assign to 'x' because it is a read-only property.
            
          
        TypeScriptμμ λ΄κ²°ν¨μ± ꡬνμ μν λͺ¨λ² μ¬λ‘
TypeScriptμμ λ΄κ²°ν¨μ±μ ꡬννκΈ° μν λͺ κ°μ§ μ€μ©μ μΈ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€.
1. λͺ νν μΈν°νμ΄μ€ λ° νμ μ μ
μ μ μλ μΈν°νμ΄μ€ λ° νμ λ³μΉμ ν΅ν΄ μΌκ΄λ λ°μ΄ν° ꡬ쑰λ₯Ό μ€μ ν©λλ€. μ΄λ μ½λ λͺ νμ±μ ν₯μμν€κ³ μ»΄νμΌλ¬κ° νμ κ΄λ ¨ μ€λ₯λ₯Ό ν¬μ°©νλ λ° λμμ΄ λ©λλ€. μ΄ λ°©λ²μ νλ‘μ νΈ κ·λͺ¨λ κ°λ°μ μμ κ΄κ³μμ΄ λ³΄νΈμ μ λλ€. μ μ ν νμ μ μλ λ°μ΄ν° νμ λΆμΌμΉλ‘ μΈν΄ λ°μνλ μ€λ₯λ₯Ό μ€μ¬μ€λλ€.
2. ν¬κ΄μ μΈ μ€λ₯ μ²λ¦¬ ꡬν
μμΈλ₯Ό μ²λ¦¬νκΈ° μν΄ `try...catch` λΈλ‘μ μ¬μ©νκ³ , νΉμ  μλ리μ€μ λν μ¬μ©μ μ μ μ€λ₯ ν΄λμ€λ₯Ό λ§λ€κ³ , μ±κ³΅ λ° μ€ν¨ μλ리μ€λ₯Ό κ΄λ¦¬νκΈ° μν΄ κ²°κ³Ό νμ λλ μ νμ  νμ μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€. μ€λ₯ μ²λ¦¬λ λ€νΈμν¬ λ¬Έμ , μλͺ»λ λ°μ΄ν° λ° κΈ°ν κ°λ₯ν μ€ν¨ μ§μ μ μμΈ‘ν΄μΌ ν©λλ€. μ΄λ μμ€ν  μ¬μ©μμκ² λ―ΈμΉλ λͺ¨λ μ€ν¨μ μν₯μ μ΅μννλ λ°©μμΌλ‘ νμ ꡬνλμ΄μΌ ν©λλ€.
3. μ λ ₯ λ°μ΄ν° μ ν¨μ± κ²μ¬
μΈλΆ μμ€(μ: API, μ¬μ©μ μ λ ₯)μμ μμ λ λͺ¨λ λ°μ΄ν°κ° μμλλ νμ λ° μ μ½ μ‘°κ±΄μ μΆ©μ‘±νλμ§ νμΈνκΈ° μν΄ μ ν¨μ±μ κ²μ¬ν©λλ€. μ΄λ μλͺ»λ λ°μ΄ν°κ° λ°νμ μ€λ₯λ₯Ό μ λ°νλ κ²μ λ°©μ§ν©λλ€. μ λ ₯ μ ν¨μ± κ²μ¬λ λ°μ΄ν° 무결μ±μ μ μ§νκ³ μμμΉ λͺ»ν λμμ μ€μ΄λ λ° μ€μν λ¨κ³μ λλ€. κ΅μ  μμ€ν μ κ²½μ° νμ μ¬λ¬ μ§μμ λ€μν λ°μ΄ν° νμ λ° μꡬ μ¬νμ κ³ λ €ν΄μΌ ν©λλ€.
4. λΆλ³μ± μμ©
μλνμ§ μμ λΆμμ©μ λ°©μ§νκ³ μ½λλ₯Ό μΆλ‘ νκΈ° μ½κ² λ§λ€κΈ° μν΄ `readonly` μμ±κ³Ό λΆλ³ λ°μ΄ν° ꡬ쑰λ₯Ό μ¬μ©ν©λλ€. λΆλ³μ±μ λ°μ΄ν° κ²½μ λ° λκΈ°ν λ¬Έμ λ₯Ό νΌνκΈ° μν΄ λμ νλ‘κ·Έλλ°μμ νΉν μ μ©ν©λλ€.
5. μ€λ³΅μ±μ κ³ λ €ν μ€κ³
μμμ μΈ μ€ν¨λ₯Ό μ²λ¦¬νκ³ μμ€ν μ νλ ₯μ±μ κ°μ νκΈ° μν΄ μν· λΈλ μ΄μ»€ λ° μ¬μλμ κ°μ μν€ν μ² ν¨ν΄μ κ³ λ €νμμμ€. μ΄λ¬ν ν¨ν΄μ ꡬννλ©΄ μ°μ μ€ν¨ κ°λ₯μ±μ μ€μ΄κ³ μ ν리μΌμ΄μ μ΄ μ₯κΈ°κ° μ€λ¨μ κ²ͺλ κ²μ λ°©μ§ν©λλ€. μ΄λ μμ€ν μ μν λ° μ±λ₯μ λν κ°μμ±μ μ 곡νλ λͺ¨λν°λ§ λ° λ‘κΉ κ³Ό κ²°ν©λμ΄μΌ ν©λλ€.
6. μ² μ ν λ¨μ ν μ€νΈ λ° ν΅ν© ν μ€νΈ μμ±
κ°λ° μ£ΌκΈ° μ΄κΈ°μ μ μ¬μ μΈ μ€λ₯λ₯Ό μλ³νκ³ μμ νκΈ° μν΄ μ½λλ₯Ό μ격νκ² ν μ€νΈν©λλ€. ν μ€νΈ μΌμ΄μ€λ μ ν리μΌμ΄μ μ΄ μ€λ₯λ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νλμ§ νμΈνκΈ° μν΄ κΈμ μ  λ° λΆμ μ  μλ리μ€λ₯Ό λͺ¨λ λ€λ£¨μ΄μΌ ν©λλ€. μ¬κΈ°μλ μ ν리μΌμ΄μ μ΄ λ°μ΄ν° μ ν¨μ± κ²μ¬ μ€λ₯, λ€νΈμν¬ μ€ν¨ λ° κΈ°ν μ€λ₯ 쑰건μ μ²λ¦¬νλ λ°©λ²μ ν μ€νΈνλ κ²μ΄ ν¬ν¨λμ΄μΌ ν©λλ€. μ΄λ μΌλ°μ μΈ κ°λ° κ³Όμ μμ λͺ ννμ§ μμ μ μλ λ―Έλ¬ν λ²κ·Έλ₯Ό λ°κ²¬νλ λ° λμμ΄ λ κ²μ λλ€.
7. λͺ¨λν°λ§ λ° λ‘κΉ κ΅¬ν
μ ν리μΌμ΄μ μ μνλ₯Ό μΆμ νκ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νκΈ° μν΄ ν¬κ΄μ μΈ λͺ¨λν°λ§ λ° λ‘κΉ μ ꡬνν©λλ€. λͺ¨λν°λ§ λꡬλ μμ€ν  μ±λ₯, μ€λ₯μ¨ λ° λ¦¬μμ€ μ¬μ©λ₯ μ λν ν΅μ°°λ ₯μ μ 곡ν΄μΌ ν©λλ€. λ‘κΉ μ μ€λ₯, κ²½κ³ λ° μ 보 λ©μμ§λ₯Ό ν¬ν¨νμ¬ μ ν리μΌμ΄μ  μ΄λ²€νΈμ λν μμΈν μ 보λ₯Ό μΊ‘μ²ν΄μΌ ν©λλ€. μ΄ μ 보λ νλ‘λμ μμ λ°μν μ μλ λͺ¨λ λ¬Έμ λ₯Ό μ μνκ² μ§λ¨νκ³ ν΄κ²°νλ λ° μ€μν©λλ€. μ΄ λ°©λ²μ μ΅μ’ μ¬μ©μλ‘λΆν° λ°μ μ 보μλ§ μμ‘΄νμ¬ λ¬Έμ μ κ·Όλ³Έ μμΈμ μλ³νκΈ° μ΄λ €μΈ μ μλ μ  μΈκ³μ λΆμ°λ μμ€ν μμ λ§€μ° μ€μν©λλ€.
8. μν· λΈλ μ΄μ»€ λ° μ¬μλ λ©μ»€λμ¦ κ³ λ €
μΈλΆ μλΉμ€μ μνΈ μμ©ν λ μλΉμ€κ° μ¬μ© λΆκ°λ₯ν΄μ§λ©΄ μ°μ μ€ν¨λ₯Ό λ°©μ§νκΈ° μν΄ μν· λΈλ μ΄μ»€λ₯Ό ꡬννμμμ€. μν· λΈλ μ΄μ»€λ λ³΄νΈ μ₯λ²½ μν μ νμ¬ μ ν리μΌμ΄μ μ΄ μ€ν¨νλ μλΉμ€λ₯Ό λ°λ³΅μ μΌλ‘ νΈμΆνμ¬ μ μ¬μ μΌλ‘ κ²μ΄νΈμ¨μ΄λ₯Ό μλνλ κ²μ λ°©μ§ν©λλ€. μΌμμ μΈ λ€νΈμν¬ λ¬Έμ  λλ μλΉμ€ μ€λ¨μ μ²λ¦¬νκΈ° μν΄ μ§μ λ°±μ€νλ₯Ό μ¬μ©νλ μ¬μλ λ©μ»€λμ¦μ ꡬννμμμ€. μ§μ λ°±μ€νλ μ¬μλ κ°μ μ§μ°μ μ¦κ°μμΌ μ€ν¨νλ μλΉμ€μ λν κ³Όλν λΆνλ₯Ό λ°©μ§νλ λ° μ μ©ν©λλ€. μ΄λ ν κ΅¬μ± μμμ μ€ν¨κ° λ€λ₯Έ κ΄λ ¨ κ΅¬μ± μμμ μν₯μ λ―ΈμΉ μ μλ λΆμ° μμ€ν μμ νΉν μ€μν©λλ€.
9. νμ μμ  λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬ μ¬μ©
μ νμ μ΄ μ§μ λκ³ μ°μν TypeScript μ§μμ μ 곡νλ λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬λ₯Ό μ ννμμμ€. μ΄λ νμ κ΄λ ¨ μ€λ₯μ μνμ μ€μ΄κ³ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ½λλ² μ΄μ€μ λ μ½κ² ν΅ν©ν μ μλλ‘ ν©λλ€. νλ‘μ νΈμ ν΅ν©νκΈ° μ μ νμ¬ λΌμ΄λΈλ¬λ¦¬μ νΈνμ±μ νμΈνμμμ€. μ΄λ μΈλΆ 리μμ€μ μ λ’°ν μ μλ κΈ°λ₯μ μμ‘΄νλ μ  μΈκ³μ μΌλ‘ κ°λ°λ μμ€ν μ νΉν μ€μν©λλ€.
10. μ΅μ κΆν μμΉ μ€μ
κ΅¬μ± μμκ° μμ μ μννλ λ° νμν μ΅μνμ κΆνλ§ κ°μ ΈμΌ νλ€κ³ λͺ μνλ μ΅μ κΆν μμΉμΌλ‘ μμ€ν μ μ€κ³νμμμ€. μ΄λ 보μ μΉ¨ν΄ λλ μ€ν¨μ μ μ¬μ  μν₯μ μ€μ λλ€. κ° κ΅¬μ± μμμ κΆνμ μ΅μννλ©΄ κ²°ν¨ λλ μ μμ μΈ νμμκ° μ΄λν μ μλ μμμ μ νν©λλ€. μ΄λ νλ‘μ νΈμ κ·λͺ¨λ λ²μμ κ΄κ³μμ΄ κ³ λ €λμ΄μΌ ν©λλ€.
κΈλ‘λ² μ¬λ‘ λ° μ¬λ‘ μ°κ΅¬
μ΄λ¬ν κ°λ μ΄ λ€μν μλ리μ€μ μ΄λ»κ² μ μ©λλμ§ λ³΄μ¬μ£Όλ λͺ κ°μ§ μλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
μμ  1: μ μμκ±°λ νλ«νΌ (κΈλ‘λ²)
κΈλ‘λ² μ μμκ±°λ νλ«νΌμ κ³ λ €ν΄ λ³΄μμμ€. λ΄κ²°ν¨μ±μ νλ§€ λ° κ³ κ° λ§μ‘±λμ μ§μ μ μΈ μν₯μ λ―ΈμΉλ―λ‘ λ§€μ° μ€μν©λλ€. νλ«νΌμ μ¬μ©μ λ°μ΄ν°, κΈμ΅ κ±°λ λ° μ¬κ³ κ΄λ¦¬λ₯Ό μ²λ¦¬ν©λλ€. TypeScriptλ μ¬λ¬ κ°μ§ λ°©λ²μΌλ‘ μ΄ νλ«νΌμ λ΄κ²°ν¨μ±μ κ°μ νλ λ° μ¬μ©λ μ μμ΅λλ€.
- νμ μμ  λ°μ΄ν° ꡬ쑰: μ ν, μ£Όλ¬Έ λ° μ¬μ©μ νλ‘νμ λν μΈν°νμ΄μ€λ₯Ό μ μν©λλ€. μ΄λ νλ«νΌμ μ¬λ¬ λΆλΆμμ λ°μ΄ν° μΌκ΄μ±μ 보μ₯νκ³ μλͺ»λ λ°μ΄ν° νμ μΌλ‘ μΈν μ€λ₯λ₯Ό μ κ±°ν©λλ€.
 - κ°λ ₯ν μ€λ₯ μ²λ¦¬: API μ€λ₯, κ²°μ  κ²μ΄νΈμ¨μ΄ μ€ν¨ λ° λ°μ΄ν°λ² μ΄μ€ μ°κ²° λ¬Έμ λ₯Ό μ²λ¦¬νκΈ° μν΄ `try...catch` λΈλ‘μ ꡬνν©λλ€. μ€λ₯λ₯Ό λΆλ₯νκ³ κ° μ€λ₯μ λν νΉμ  μ²λ¦¬ λ‘μ§μ μ 곡νκΈ° μν΄ μ¬μ©μ μ μ μ€λ₯ ν΄λμ€λ₯Ό μ¬μ©ν©λλ€.
 - μν· λΈλ μ΄μ»€: κ²°μ  κ²μ΄νΈμ¨μ΄ ν΅ν©μ μν μν· λΈλ μ΄μ»€λ₯Ό ꡬνν©λλ€. κ²°μ  κ²μ΄νΈμ¨μ΄λ₯Ό μ¬μ©ν μ μκ² λλ©΄ μν· λΈλ μ΄μ»€λ νλ«νΌμ΄ λ°λ³΅μ μΌλ‘ μ°κ²°μ μλνμ¬ κ²μ΄νΈμ¨μ΄λ₯Ό μ μ¬μ μΌλ‘ μλνλ κ²μ λ°©μ§ν©λλ€. λμ μ¬μ©μμκ² μ μ ν μ€λ₯ λ©μμ§λ₯Ό νμνμ¬ λ λμ μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
 - μ¬μλ λ©μ»€λμ¦: μΈλΆ λ°°μ‘ κ³΅κΈμ 체μ λν API νΈμΆμ μν΄ μ§μ λ°±μ€νλ₯Ό μ¬μ©νλ μ¬μλλ₯Ό ꡬνν©λλ€. μ΄λ₯Ό ν΅ν΄ μμ€ν μ μΌμμ μΈ λ€νΈμν¬ λ¬Έμ λ‘λΆν° μλμΌλ‘ 볡ꡬν μ μμ΅λλ€.
 
μμ  2: μλ£ μ ν리μΌμ΄μ  (κ΅μ )
μλ£ μ ν리μΌμ΄μ μμ λ°μ΄ν° λ¬΄κ²°μ± λ° κ°μ©μ±μ κ°μ₯ μ€μν©λλ€. νμ κΈ°λ‘μ μ μ₯νκ³ , μ½μμ κ΄λ¦¬νλ©°, μμ¬μ νμ κ°μ μμ¬μν΅μ μ©μ΄νκ² νλ μμ€ν μ κ³ λ €νμμμ€. λ΄κ²°ν¨μ±μ μ€μν μλ£ μ λ³΄κ° νμ μ¬μ© κ°λ₯νλλ‘ λ³΄μ₯νλ λ° λμμ΄ λ©λλ€. TypeScriptμ μ΄μ μ λ€μκ³Ό κ°μ΅λλ€.
- λ°μ΄ν° μ ν¨μ± κ²μ¬: λ°μ΄ν° μ νμ±κ³Ό μΌκ΄μ±μ 보μ₯νκΈ° μν΄ λ―Έλ¦¬ μ μλ μΈν°νμ΄μ€μ λν΄ λͺ¨λ λ€μ΄μ€λ νμ λ°μ΄ν°μ μ ν¨μ±μ κ²μ¬ν©λλ€.
 - λΆλ³μ±: νμ κΈ°λ‘μ λν μ°λ°μ μΈ μμ μ λ°©μ§νκΈ° μν΄ λΆλ³ λ°μ΄ν° ꡬ쑰λ₯Ό μ¬μ©ν©λλ€.
 - μ€λ³΅μ±: κΈ°λ³Έ λ°μ΄ν°λ² μ΄μ€κ° μ€ν¨νλλΌλ λ°μ΄ν° κ°μ©μ±μ 보μ₯νκΈ° μν΄ μ€λ³΅ λ°μ΄ν°λ² μ΄μ€ μμ€ν μ ꡬνν©λλ€.
 - 보μ κ³ λ € μ¬ν: μ΅μ κΆν μμΉμ μ¬μ©ν©λλ€. λ°μ΄ν° νλΌμ΄λ²μλ₯Ό μ μ§νκΈ° μν΄ μνΈν λ° μ κ·Ό μ μ΄μ κ°μ μ‘°μΉλ₯Ό ꡬνν©λλ€.
 
μμ  3: κΈμ΅ κ±°λ μμ€ν  (μ  μΈκ³)
κΈμ΅ κ±°λ μμ€ν μ λμ κ°μ©μ±κ³Ό μ νμ±μ νμλ‘ ν©λλ€. μ΄λ€ λ€μ΄νμμ΄λ μ€λ₯λΌλ μλΉν μ¬μ μ  μμ€μ μ΄λν μ μμ΅λλ€. TypeScriptλ λ€μκ³Ό κ°μ λ°©μμΌλ‘ λ΄κ²°ν¨μ±μ κΈ°μ¬ν μ μμ΅λλ€.
- μ€μκ° λ°μ΄ν° μ ν¨μ± κ²μ¬: λ€μν κ±°λμμμ μμ λλ μ€μκ° μμ₯ λ°μ΄ν°μ μ ν¨μ±μ κ²μ¬νμ¬ λ°μ΄ν° 무결μ±μ 보μ₯νκ³ μλͺ»λ κ±°λ κ²°μ μ λ°©μ§ν©λλ€.
 - λμ μ²λ¦¬: λ°μ΄ν° κ²½μ λλ κΈ°ν μ€λ₯ μμ΄ κ±°λ μ£Όλ¬Έμ λμμ μ²λ¦¬νκΈ° μν΄ λΆλ³μ±κ³Ό ν¨κ» λ©ν°μ€λ λ©μ μ¬μ©ν©λλ€.
 - κ²½κ³ λ° λͺ¨λν°λ§: μμ€ν  μ±λ₯μ λν μ€μκ° λͺ¨λν°λ§μ μ€μ ν©λλ€. μμ€ν μ΄ λͺ¨λ μ€λ¨μΌλ‘λΆν° μ μνκ² λ³΅κ΅¬ν μ μλλ‘ μ€μν μ₯μ μ λν κ²½κ³ λ₯Ό ꡬνν©λλ€.
 - νμΌμ€λ² λ©μ»€λμ¦: κΈ°λ³Έ μλ²λ₯Ό μ¬μ©ν μ μκ² λλ©΄ μλμΌλ‘ λ°±μ μλ²λ‘ νμΌμ€λ²νλλ‘ μμ€ν μ μ€κ³ν©λλ€.
 
κ²°λ‘
TypeScriptλ λ΄κ²°ν¨μ± μμ€ν μ ꡬμΆνλ λ° μ μ©ν λꡬλ₯Ό μ 곡ν©λλ€. μ μ  νμ΄ν, νμ μμ μ± λ° μ€λ₯ μ²λ¦¬ κΈ°λ₯μ νμ©νμ¬ κ°λ°μλ μ€ν¨μ λν΄ λμ± κ²¬κ³ νκ³ μ λ’°ν μ μμΌλ©° νλ ₯μ μΈ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμ μ€λͺ λ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ μ  μΈκ³ κ°λ°μλ€μ λ€μν νκ²½μ κ³Όμ λ₯Ό 견λ μ μλ μμ€ν μ ꡬμΆν μ μμ΅λλ€. TypeScriptμ κ°λ ₯ν κΈ°λ₯μ νμ©νμ¬ λ μμ μ μ΄κ³ νλ ₯μ μΈ μμ€ν μ λ§λ€κ³ , μ¬μ©μ κ²½νμ ν₯μμν€λ©°, νλ‘μ νΈμ μ§μμ μΈ μ±κ³΅μ 보μ₯νμμμ€. νμ λ°μ΄ν° μ ν¨μ± κ²μ¬, κ°λ ₯ν μ€λ₯ μ²λ¦¬ λ° μ€λ³΅μ±μ κ³ λ €ν μ€κ³λ₯Ό μ°μ μνλ κ²μ κΈ°μ΅νμμμ€. μ΄λ¬ν μ λ΅μ μ ν리μΌμ΄μ μ μκΈ°μΉ μμ λμ κ³Ό μ€ν¨μ λ νλ ₯μ μΌλ‘ λ§λ€ κ²μ λλ€. μ΄λ μ§μμ μΈ κ°μ κ³Όμ μ΄λ©°, λμμλ λͺ¨λν°λ§, μ격ν ν μ€νΈ λ° μννΈμ¨μ΄ κ°λ°μ μ§ννλ νκ²½μ λν μ μμ νμλ‘ ν©λλ€.